home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 4 / Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso / Development / Source / MacStarter (THINK C 5.0⁄6.0) / main.c < prev   
Text File  |  1994-01-25  |  4KB  |  138 lines

  1. /* MacStarter is a shell for simple Macintosh applications shell written in
  2.    THINK C, with some small use of its object-oriented features.
  3.    The whole system is described in a README file that should be in 
  4.    the same folder with this file.
  5.       You can completely ignore this file, whose job is simply to handle
  6.    the basic interaction with the user and to route "events" to their
  7.    proper handlers.
  8. */   
  9.    
  10. #include "globals-MacStarter.h"
  11.  
  12. MenuHandle appleMenu;
  13. Handle gMenuBar;
  14.  
  15. void HandleMenuEvent(long selection, int* done);
  16. void InstallMenus(void);
  17. void InitApplication(void);
  18. void UpdateMenus(void);
  19. void DoEditMenu(int itemNum);
  20. void DoFileMenu(int itemNum, int* done);
  21. void DoOtherMenu(int menuID, int itemNum);
  22. void ApplicationIdle(void);
  23. void CleanUpApplication(void);
  24. void AboutBox(void);
  25.  
  26. void main (void) {
  27.  
  28.    int done;
  29.    xWindow *win;
  30.    short partNum;
  31.    long select;
  32.    WindowPtr clickWin;
  33.    
  34.    InitGraf(&thePort);
  35.    InitFonts();
  36.    FlushEvents(everyEvent, 0);
  37.    InitWindows();
  38.    InitMenus();
  39.    TEInit();
  40.    InitDialogs(0L);
  41.    MaxApplZone();
  42.  
  43.    InstallMenus();
  44.    InitApplication();
  45.    InitCursor();
  46.    done = 0;
  47.    for (;!done;) {
  48.      if (WaitNextEvent(everyEvent,&gEvent,gEventWaitTime,0L)) 
  49.        switch (gEvent.what) {
  50.           case keyDown: {
  51.              if (gEvent.modifiers & cmdKey) {
  52.                 UpdateMenus();
  53.                 if (select = MenuKey(gEvent.message & 0xFF)) 
  54.                    HandleMenuEvent(select, &done);
  55.              }
  56.              else {
  57.                 if (xWindow::Window2XWindow(FrontWindow(),&win))
  58.                    win->doEvent();
  59.              };
  60.              break;
  61.           };
  62.           case autoKey: {
  63.              if (!(gEvent.modifiers & cmdKey)) {
  64.                 if (xWindow::Window2XWindow(FrontWindow(),&win))
  65.                    win->doEvent();
  66.              };
  67.              break;
  68.           };
  69.           case mouseDown: {
  70.              partNum = FindWindow(gEvent.where,&clickWin);
  71.              if (partNum == inMenuBar) {
  72.                 UpdateMenus();
  73.                 if (select = MenuSelect(gEvent.where))
  74.                    HandleMenuEvent(select, &done);
  75.              }
  76.              else if (partNum == inSysWindow) {
  77.                 SystemClick(&gEvent,clickWin);
  78.              }
  79.              else if (partNum >= inContent) {
  80.                 if (xWindow::Window2XWindow(clickWin,&win))
  81.                    win->doEvent();
  82.              };
  83.              break;
  84.           }
  85.           case updateEvt: {
  86.              if (xWindow::Window2XWindow((WindowPtr)gEvent.message,&win))
  87.                 win->doEvent();
  88.              break;
  89.           }
  90.           case activateEvt: {
  91.              if (xWindow::Window2XWindow((WindowPtr)gEvent.message,&win))
  92.                 win->doEvent();
  93.           }
  94.        };
  95.      ApplicationIdle();
  96.   };
  97.   CleanUpApplication();
  98. }
  99.  
  100.  
  101. void HandleMenuEvent(long selection, int* done) {
  102.   short menuID, itemNum;
  103.   Str255 daName;
  104.   menuID = HiWord(selection);
  105.   itemNum = LoWord(selection);
  106.   if (menuID) {
  107.      if (menuID == 1) {
  108.         if (itemNum == 1)
  109.            AboutBox();
  110.         else {
  111.            GetItem(appleMenu,itemNum,daName);
  112.            OpenDeskAcc(daName);
  113.         }
  114.      }
  115.      else if (menuID == 2) {
  116.         DoFileMenu(itemNum,done);
  117.      }
  118.      else if (menuID == 3) {
  119.         if ( itemNum == 2 || itemNum > 6 || !(SystemEdit(itemNum-1)) )
  120.            DoEditMenu(itemNum);
  121.      }
  122.      else
  123.         DoOtherMenu(menuID,itemNum);
  124.      HiliteMenu(0);
  125.   }
  126. }
  127.  
  128.  
  129. void InstallMenus(void) {
  130.    gMenuBar = GetNewMBar(1024);
  131.    SetMenuBar(gMenuBar);
  132.    appleMenu = GetMHandle(1);
  133.    AddResMenu(appleMenu, 'DRVR');
  134.    DrawMenuBar();
  135. }
  136.  
  137.  
  138.